23

» Администрация XGM / Не загружаются картинки в ресурс!

Похожие вопросы:

ответ
На сколько я знаю, Микс в отличии от локальных файлов не требует правок в реестре.
ответ
Он кладет это дело в память после preloader`а Можно код изменять напрямую в озу.

23

» WarCraft 3 / Создание

Похожие вопросы:

ответ
Скорее всего кривая модель, к автору нужно обратится.
ответ
  1. Есть небольшой нюанс - сборщик мусора собирает мертвые объекты когда их количество достигло критического уровня, а не когда они выходят из области видимости. Возможно, что-то мешает ему успешно собрать мусор, например создание 900 тысяч новых объектов в секунду.
  2. Попробуй нормальный таймер вместо периодик триггера, периодик триггеры известны своей лагучестью.
ответ
Надо жуков дать под контроль не играющему даже за ИИ игроку, пустому слоту, тогда не должны выкопаться
а вообще как-то странно
ответ
я за, только скорее всего
на денежной основе
потому шо идей у самого тонны
Ну а вообще глянуть бы ещё что там у тебя за мапа и что за заклинания и что к чему
И какая версия варика?
Если для 1.26, то NOPE, а если выше то пиши в лс, кинь мапу и сразу распиши поподробнее что к чему, лучше в ВК
ответ
У меня такое бывает когда уже много работы в карте сделано...просто смирилась...а еще вариант, это если ты большой кистью елозишь на отдаленной камере...опять же...смириться :>

23

» WarCraft 3 / Как запретить возможность сохраняться?

Похожие вопросы:

ответ
"Далеко твоя рпг не уйдёт" моя рпг тебя переживет.
Ты тоже когда родился не умел так нагло хамить незнакомым людям, научился же как то. Люди с более серьезным отношением к миру чем "изменить систему один не могу но буду плакать об этом" могут изучить все что захотят и даже в одиночку будут стоить больше чем тысяча "всегда сдающихся" людей,
и тот человек (Да удалось, даже был лаунчер для этой игры. Forgotten Land) это подтвердил, хотя я уверен что он быстро опустил руки.
p.s чел прекращай настраивать других людей на поражение, если ты что-то можешь дать - дай, если хочешь чтобы другие не добились успеха чтобы ты оказался прав и не чувствовал себя ущербным то просто отойди в сторону.
Я на все твои выпады отвечу лишь одной фразой:
"Dota была обычной картой для warcraft 3 и она поначалу тоже была пустой ".
Ответы получены, пару шарящих людей нашел, (дай бог каждому такого человека который рассказал мне о многом что тут считают до сих пор невозможным)
Спасибо за поддержку! и особенно одному пользователю. Ведь именно благодаря таким людям как life2smiler, люди не делают хорошие проэкты а другие люди соответственно вынуждены играть в некачественные карты и в течении нескольких лет не находить решения наболевших проблем
(если нет хотя бы 1 го человека кому удалось сделать что-то необычное то все остальные продолжат считать это невозможным) А сегодня стало ясно что могут не знать о чем либо не только потому что никто не делал этого, а потому что человек на самом деле сделал но никому говорить не стал :)
ответ
~8gabriel8:
Что-то по утру пробило сделать возвращение предмета в слот инвентаря)
Чтобы проигрывался звук неудачи, и появлялась надпись на экране, что не удалось выложить предмет, попытался сделать его невыпадающим в событии юнит теряет предмет. Но ничего не получилось, герой всё равно его выкладывает. Удалять предмет и создавать на его месте такой же не получилось, да и вряд ли бы мог быть нужный результат, так как сообщения на экран выводятся в результате непосредственных действий игрока, а не их триггерной имитации.

23

» WarCraft 3 / Двойная угроза

Похожие вопросы:

ответ
Событие игрок выбирает юнит
условие - сравнение игроков - triggering unit принадлежит владельцу triggering player
Дейстиве - Триггер - выключить this trigger
Действие - Отряд - выбрать - юниты на карте соответствующие условию "юнит принадлежит Triggering player"
Выбор - add picked unit to selection of Triggering player
Дейстиве - Триггер - включить this trigger

Ладно, на короче
ответ
Ну только триггерные системы отрядов, была такая...
Вот пример ссылочка
Были и другие, поиск в помощь.
Вот еще ссылка
ответ
Я решил проблему, используя обработчики событий BlzTriggerRegisterPlayerKeyEvent и EVENT_PLAYER_MOUSE_DOWN
При нажатии правой кнопки мыши проверяется наличие живого героя и селекция юнитов, если в ней нет юнитов которыми игрок может управлять (или вообще никто не выбран) то юнит моментально отправляется приказом "move" в точку, на которую кликнул игрок и сразу выбирается.
При нажатии клавиши герой просто выбирается.

23

» WarCraft 3 / Нормали в MdlVis

Похожие вопросы:

ответ
Окна - редактор материалов - двойной щелчок на любом (каждом) - там флаги есть, Незатуманенный и т.д.
ответ
В общем, пока что единственный способ, который для меня более менее сработал, это импортнуть в 3д макс с помощью Neodex, провести необходимые махинации, и экспортировать обратно. Правда источник света он не хотел обратно выплёвывать, но его несложно перенастроить.
Если кому-то вдруг интересно, зачем всё: я пытаюсь сделать здоровую версию цыганского вагончика из вов, с качающимся фонарём, правильными тенями и т.д.
ответ
Модель не для варкрафта, ваш кэп
ответ
попробовать указать правильное положение новых костей от катапульты в последнем КК, в конце анимации смерти? мб не хватает этих данных и поэтому происходит такая ерунда тк в них подставляется что то рандомное

23

» WarCraft 3 / Заклинание/эффект

Похожие вопросы:

ответ
SilweR:
Сделал через костыль - взял ауру "Торнадо (замедление)", обнулил все ее эффекты, сделал целью "сам воин" и поставил нужное заклинание. Но может, есть более изящные решения?
В принципе, ты сам сделал самое простое. Теоретически можно еще как-то через дамми-юнита заморочиться, но проще всего - то, что ты уже сделал.
ответ
Для аттачей необходимо использовать способность Tree of Life upgrade ability (Atol), видна только в JNGP, но при помощи некоторых манипуляций можно и в Reforged увидеть.
Альтернатив не так много, о них уже сказал Extremator.
Для этого берутся либо ауры (тогда в них ещё можно и специфический бафф накладывать на носителя), либо абилки от "когтей атаки" и "кольца защиты" (дающие +атаки и +защиту, в них точно так же как в ауре настраиваются точки крепления и модели)
Использовать способность Shpere (Asph) или аналоги у духов возмездия не рекомендуются.
ответ
Символ запятой можно заменить на ALT+0130 (‚). Так не будет обрываться. На Рефордже убрали это ограничение и можно писать текст любой длины.
ответ
Советы:
  1. Триггерно через добавление эффекта на аттаче
  2. Триггерно через добавление любой способности пустышки, например сфера огня, с убранными характеристиками и правильно настроеными аттачами
  3. В РО через правильно настренную способность с действием на себя, например рёв, тогда нужно поменять настройки бафа "над головой, на свой"
Модель в студию, или ссылку на модель с внешнего источника, там должны быть рекомендации на каком аттаче использовать данную модель
ответ

23

» WarCraft 3 / Тень модели

Похожие вопросы:

ответ
прочитать правила импорта текстур, которые пишут рядом с моделью
чаще всего нужно удалить все строки в импорте, чтобы осталось TextureName.blp
ответ
~8gabriel8:
Определил причину невидимости модели после сохранения в war3me. В Geoset Animation Manager должна стоять Alpha 1, а он почему-то делает 0 или -1.

Поставил в Geoset Animation Manager не глобальные Color и Alpha, а для первых кадров всех 6 анимаций. Стало всё нормально и триггерные костыли не нужны.
Модель красного свечения ауры на юнитах:
Карта с этой аурой:
А отредактировать mdx в HEX-редакторе не сумел.
ответ
~8gabriel8:
Hate, вообще-то указал, что текстура за тобой, а ты вынудил меня напрягаться(
Хотя режим же сменил с Transparent на Blend, так что правильно всё
ответ
Bergi_Bear, видимо да.
GreatGorgile, это сбитые нормали, можешь вручную в мдлвизе их повернуть, но в максе это делается в один клик
ответ
Vann009:
Мне кажется, дело в том, что движок третьего варкрафта умеет работать только с низкополигональными моделями (впрочем, я могу ошибаться, но глюки с тенями у меня были только на "сложных" моделях с гладкими углами)
Переимпортировал модель, заменил редактор и всё работает.

23

» WarCraft 3 / Замена текстур у модели

Похожие вопросы:

ответ
Какой путь к текстуре в самой модели? В оригинальном Warcraft'е это "Textures\Meatwagon.blp".
Если у тебя путь "Textures\trupovozka_by_autorname.blp", то в Импорте так и пиши: "Textures\trupovozka_by_autorname.blp".
ответ
Бордер, xgm.guru/p/wc3/various_textures
Ищи через гугл "xgm.guru [то, что тебе надо]", это имхо удобнее местного поиска, да
Только имхо это все равно не оч:
  • многовато геморроя
  • способ подразумевает каст дамми абилки, а это опять же срабатывания всяких "юнит кастит абилку" и бла-бла-бла
  • ну и хотя мелочь - баг после сейва, он там описан
проще тупо несколько юнитов с разными текстурами сделать и смириться с кол-вом занимаемого места и/или необходимостью прелоада, зато всё будет шито-крыто

23

» WarCraft 3 / Проблема с воскрешением героев

Похожие вопросы:

ответ
call BJDebugMsg(string) отладка в редакторе.
ответ
~8gabriel8:
Очень просто)

События:
Юнит Умирает
Условия:
(Diying unit) равно Герой
Owner of (Diying unit) не равно Нейтрально-враждебный
Действия:
Wait 10 секунд
Воскресить (Diying unit)

В этом триггере (Diying unit) не будет меняться с каждой новой смертью, она как локалка.
ответ
Редактор не причём, дело в самой игре.
Можно сделать воскрешение, не используя стандартные механики.
ответ
Cardinal, за такое именование переменных нужно по рукам бить.
то бежит к третьему триггеру которій и воскрешает
Не плодите триггеров, все нужные действия можно и в цикле сделать.
У вас переменная T отвечает за состояние героя, зачем проверять жив юнит или нет?
T<0 Жив
T==0 Нужно воскресить прям сейчас
T>0 Ждёт воскрешения
Cardinal:
T[номер героя] болше или равна 1
больше или равна 0 => T[] = T[] -1

23

» WarCraft 3 / Структуры и хэш-таблица

Похожие вопросы:

ответ
ладно. заработало.
не рабочий вариант
call SaveInteger(Hash,GetHandleId(GetTriggerUnit()),5555, CurrentNumberOfSettlement) в одном триггере сохраняем
set CurrentNumberOfSettlement = LoadInteger(Hash,GetHandleId(GetTriggerUnit()),5555) в другом триггере для проверки выгружаем
рабочий вариант
local integer id = GetHandleId(GetTriggerUnit())
call SaveInteger(Hash,id,5555, CurrentNumberOfSettlement) в одном триггере сохраняем
set CurrentNumberOfSettlement = LoadInteger(Hash,id,5555) в другом триггере для проверки выгружаем
Короче вернул обратно локалки, и все заработало. И почему первый вариант не работал. Ладно будут искать подводные камни. Наверное после чистой оптимизации что-то перестало работать. эх... придеться посравнивать. похоже старый код где то мб лучше. только времени потратил на методы тыка.

23

» WarCraft 3 / Вылет из лобби

Похожие вопросы:

ответ
На сайте Hive на карте написано текущая версия.
Скорее всего карта для последних патчей, где есть новые нативки.
ответ
Возможно проблема в способностях или строках, близзарды че только не сломали и нужно ждать стабильной версии игры где вылечат 99% глюков, багов и завезут максимальную совместимость со старыми картами.

23

» WarCraft 3 / Трансформация здания

Похожие вопросы:

ответ
Блин - видел очень давно похожую реализацию, но походу 100500 людей так и не научились это делать, написать чтоли самому...
Суть - для продажи предметов, войск, всяких древ талантов - используйте спеллбук + способности на основе - поставка ресурсов.
Помещаем в спеллбук до 11 способностей на основе "Поставка ресусов" - это аналог канала, настраивается приказ и прочее, но самое главное есть поля - стоймость золотом, стоймость деревом, т.е эта абилка может требовать не только ману но и золото с деревом. Так же там стоит вкладка, заряд игрока владельца - очень важная настройка:
  1. Заряд игрока владельца включен - тогда за каст ресурсы будут списыватся только у игрока владельца юнита, при этом неважно что вашим юнитом управляет другой игрок.
  2. Заряд игрока владельца выключен - тогда при касте этой абилки ресурсы будут списыватся со счета игрока, который и отдал приказ, это даже можно отследить, но немного геморойно:
Суть: делаем триггер который срабатывает на приказ каста поставки ресурсов, или события юнит начинает каст способности, условия по вкусу и действия - создать еще 1 триггер, в события которого добавить - ресурсы игрока N изменились (для каждого игрока способного купить), условием - ресурсов стало меньше на стоймость каста абилки, и действие - выключить триггер, записать GetTriggerPlayer() в глобальную переменную или в еще куда, это и будет наш игрок который кликнул на поставку ресурсов, ну и далее утилизируем триггер, удаляя действия. Можно написать все действия в условии, тогда не придется удалять действия.
Так можно отследить кто кастанул абилку поставки ресурсов если юнитом управляют несколько игроков.

23

» WarCraft 3 / Интерфейс

Похожие вопросы:

ответ
BlzFrameSetVisible(ORIGIN_FRAME_TOOLTIP, true)
BlzFrameSetVisible(ORIGIN_FRAME_UBERTOOLTIP, true)
ответ
Какой интерфейс игровой варкрафта или конкретно в редакторе что то вам мешает?
Если что, jngp поддерживает мемхак и можно вот такие вещи делать
ответ
Настройки интерфейса хранятся в файле war3mapSkin.txt, что появляется в архиве карты при изменении какого-либо значения в разделе Дополнительно -> Игровой интерфейс.
Этот файл можно закинут в папку import проекта wurst, он заменит собой оригинальный в процессе сборки. Минус такого подхода - локализация. Изменяя значения игрового интерфейса в редакторе, автоматически создаются строки локализации в файле war3map.wts для новых значений. С wurst это придется делать вручную.
ответ
а есть ли нативки чтобы эти предметы потом можно было двигать или выбрасывать
да, для движения нужен дрег анд дроп, такое есть (отлов и удержание клика левой) ну и отпускание:
  • из инвентаря на магазин чтобы продать
  • из инвентаря на землю, чтобы дропнуть
Но это потребует и свою систему инвентаря, которую можно расширить более чем 6 слотов
ответ
Только редачить положение стандартных, чтобы создавать свои элементы нужен либо клиент Renderedge либо у ребят приближенных к Личу (Караулов и Анрайз), по факту есть библиотека dll позволяющая отрисовывать фреймы. но её в живую так и не видел. Это глубокие дебри чтобы туда влазить.
Ещё есть DGUI - прим. ScorpioT1000

23

» WarCraft 3 / Текстуры.

Похожие вопросы:

ответ
Vova47, отредактируй путь к текстуре при помощи Mdlvis.
ответ
Как выяснилось у Близард формат карт нормалей немного другой. Красный и зелёный канал поменяны местами, причём красный(который зелёный) ещё и инвертирован. Это и не OpenGL и не DirectX. Зачем они так сделали - вопрос открытый.

23

» WarCraft 3 / Сохранения в карте с мемхаком

Похожие вопросы:

ответ
не лечится, я таким не интересовался, просто запретил сейвы
ответ
ох =)
расскажу, что если прочитать все 500 комментариев про мемхак, то там есть 1 нормальный ответ про то как его включить
Мне потребовалось 3 раза прочитать чтобы врубиться в это, все 500 комментов
Так вот он правильный ответ:
Для запуска мемхака нужно отказать от Cjass сняв галочку EnableAdicParser а во вкладке vJass поставить DisableScriptOpt
Советую запустить сначала карту по отлову урона на мемхаке проверить на сохраняемость, если всё получается, тогда уже переносить мемхак в свою карту
ответ
По возможности убери все способности на порчу, в коде намёков на десинки не увидел.

23

» WarCraft 3 / Как обойти ограничение?

Похожие вопросы:

ответ
Можно не делать новую способность на основе геройского инвентаря, а просто настроить способность рюкзака, а именно - включить параметр "может использовать предметы".
Но у обоих этих способов есть главный недостаток - книги повышающие статы при использовании не героями ведут к крашу игры - это нужно учитывать и либо убирать книги либо делать систему, которая не давала бы книгам попасть в руки не героям.
В принципе, при достаточном уровне навыков можно полностью заменить это кастомной системой, которая позволяла бы не просто подбирать такие предметы, но и делать это просто проходя мимо, без клика на сам предмет и без добавления инвентаря каждому юниту. Но это не самая простая задача.
ответ
А что не так jngp?
ответ
N7 Molot:
Да, клифов должен быть хоты бы 2 в палитре. Из за этого и ошибка

23

» WarCraft 3 / Не удаляется молния

Похожие вопросы:

ответ
set L = ( создать через JNGP-функцию молнию)
всё
и стандартная функция примерно так
set last_created_lightning_effect = создать молнию бла бла бла
вернуть last_created_lightning_effect
ответ
~8gabriel8:
Talgar2, как я понял, это заготовка, так как не понял, что должна способность делать)
Но чтобы работало то, что ты делаешь через wait, должно выглядеть так
P. S. Запамятовал, если способность для кампании или одиночной игры, то можно не делать, но если для многопользовательской игры и подразумевает частое использование, то надо бы сделать переменную (массив) для сохранения позиций, а в конце триггера также все удалять их через custom script. Подробнее уточнят те, кто на многопользовательских картах специализируется, так как я больше по кампаниям.

23

» WarCraft 3 / Анимирование башни

Похожие вопросы:

ответ
Такие вопросы можно описать в теле ресурса в блоге. Здесь - не подходящее место.
ответ
а если как в вархаммере? говнокод прилагается
хз правда, тот ли это архив. думаю, тот :D
ответ
Я любимый:
Так, могу посоветовать следующие кампании: Обычные кампании (как в warcraft-e) - "Рассвет Эльфов Крови", "Тени Ненависти", "Проклятие Отрекшихся", "Пришествие Орды". Кампании в жанре RPG - "День Дракона", "Последний Друид", "Повелитель Кланов", "Последний Друид", "Joe's Quest", "Deandra's Tale", "Mordork's Quest", "Call Of The Swarm", но последняя еще в разработке. Кампания-головоломка - "Последний Хранитель".
Все эти кампании можешь найти на этом сайте.
ответ
undefend = 852056
Upd: +Скрин
ответ
Taurenus,
  1. Идем сюда, читаем внимательно, возвращаемся, когда поймем содержание, в противном случае циклим прочтение, пока не поймем.
  2. Идем сюда, читаем внимательно, возвращаемся, когда поймем содержание, в противном случае циклим прочтение, пока не поймем.
  3. Как правило, те, кому нужен 1 скилл, потом придут за 2-3-4-5-6-7...100000, ибо их подход к работе / творчеству исходно выстроен на паразитировании.
Если совсем упрямый, то раздел вопросов не создан для философских вопросов, вам либо в блог, либо в социальные сети.

23

» WarCraft 3 / Не работает очищение сферы молний

Похожие вопросы:

ответ
ВНЕЗАПНО это делается одним действием: Игра - Enable/Disable Drag-Selection (настроенное на Disable drag-selection functionality (disable drag-selection box)).
ответ
Reach, каким образом делается перевоплощение в твоей карте?
Через способность, улучшение или триггерно заменой одного юнита на другой?
Мне кажется, должно сработать через Casting unit.
Я делал через способность.
Сначала нужно создать переменную типа Боевая единица.
Потом установить ей значение - тот юнит, который будет перевоплощаться.
Привязать камеру к юниту (то есть уже к переменной).
Когда юнит применяет способность, поменять значение переменной на Casting unit.
Прикрепить обратно камеру к переменной-юниту.
Обозначения на скрине:
Unit [10] - это тот самый юнит
Способность Смена оружия - сделана на основе способности друида ночных эльфов с флагом "Непрерываемый" для того, чтобы можно было перевоплощаться обратно и не терять при этом предметы.
ответ
Разумеется нет, низя. Рельеф можно перенести по клеточкам - возьми тетрадку и зарисуй. Потом перенеси на координатную сетку редактора рельефа.
ответ
Правильный ответ ДА и он здесь xgm.guru/p/renderedge/memoryhack?postid=408475#comment190
ответ
Нашел решение - убери эту галку:
Advanced -> Reset Fixed Object Heights
Вот тут

23

» WarCraft 3 / Спелл на основе дамми.

Похожие вопросы:

ответ
Вобщем озарение как всегда пришло внезапно - понял что GetSpellAbilityUnit срабатывает на дамми и записывает в массив его, а не цель щита. Просто передвинул махинации с дамми в конец функции Actions. Всё отменно работает. Всем спасибо все свободны
ответ
Только дебаффы ядовитых стрел могут стакатся, но даммик обязан иметь дальнюю атаку (при условии что у разных абилок ядовитых стрел будут разные баффы в настройках).
Так же можно юзать таймер и ауру торнадо как написали выше, ну если уж совсем нужен сложный бафф как дефолтный - то тут триггер и немного гемора с мемхаком, зато полный комплект параметров (мигает иконка в статусе перед завершением время действия, бафф спадает с цели после диспела, смерти (у цели крест перерождения или аналог), складывается или не складывается в зависимости от кода).
Пример не рекомендуемый к повторению
function FormatAirportTrainingBar takes integer fp_n returns string
    local string str = ""

    if ( fp_n <= 0 ) then
        return str
    endif

    loop
        exitwhen fp_n < 10
        if ( udg__TempBarStyle == 0 ) then
            set str = str + "''''''''''"
        else
            set str = str + "||||||||||||||||||||"
        endif
        set fp_n = fp_n - 10
    endloop

    loop
        exitwhen fp_n <= 0
        if ( udg__TempBarStyle == 0 ) then
            set str = str + "'"
        else
            set str = str + "||"
        endif
        set fp_n = fp_n - 1
    endloop

    return str
endfunction

function UpdateAirportTrainingBar takes texttag tt, integer fp_nTick, integer fp_nTickMax returns nothing
    local integer nProgress
    local integer nLen
    local string strTT1
    local string strTT2

    if ( tt == null ) then
        call BJDebugMsg( "text tag hDZzRwuZxFQcXqaMPnML null" )
        return
    endif

    set nLen = R2I( I2R( fp_nTickMax ) / 300 * 100 )
    set nProgress = R2I( I2R( nLen ) / fp_nTickMax * fp_nTick )
    set strTT1 = "" + FormatAirportTrainingBar( nProgress )
    set strTT2 = FormatAirportTrainingBar( nLen - nProgress ) + ""
    call SetTextTagText( tt, "|cff0080c0" + strTT1 + "|r|cffff0000" + strTT2 + "|r", 0.023 )
endfunction

function Get_Staff_of_Purification takes unit runner returns item
    set bj_forLoopAIndex = 0
    set bj_lastCreatedItem = null
    
    if GetUnitAbilityLevel( runner, 'Arun' ) == 0 then
        return null
    endif
    
    loop
        exitwhen bj_forLoopAIndex > 5

        set bj_lastCreatedItem = UnitItemInSlot( runner, bj_forLoopAIndex )
        if GetItemTypeId( bj_lastCreatedItem ) == 'I01A' then
            return bj_lastCreatedItem
        endif

        set bj_forLoopAIndex = bj_forLoopAIndex + 1
    endloop

    return bj_lastCreatedItem
endfunction

function Trig_RunnerDamageDetect_Conditions takes nothing returns boolean
    if GetTriggerEventId( ) == EVENT_UNIT_DAMAGED then
        return GetEventDamage( ) > 0.00 and GetEventDamageSource( ) != GetTriggerUnit( ) and GetEventDamageSource( ) != DummyAttacker
    endif
    return true
endfunction

function HealRunner takes nothing returns nothing
    local DamageData dd = GetDataBX( GetExpiredTimer( ) )
    
    call UnitRemoveAbility( dd.attacked, 'AMhp' )
    call SetUnitState( dd.attacked, UNIT_STATE_LIFE, dd.hp )
    
    call RemoveDataBX( dd.trix )
    call DestroyTimer( dd.trix )
    call dd.clear( )
    call dd.destroy( )
endfunction

function Trig_RunnerDamageLock_Actions takes nothing returns nothing
    local TriggerData st = GetDataBX( GetTriggeringTrigger( ) )
    local DamageData dd
    local eventid id = GetTriggerEventId( )
    
    if id == EVENT_GAME_TIMER_EXPIRED and st.id < st.time and st.attacked != null then
        set st.id = st.id + 1
        if GetUnitAbilityLevel( st.attacked, 'Bcyc' ) > 0  or GetUnitAbilityLevel( st.attacked, 'Bcy2' ) > 0 then
            call SetTextTagPos( st.tt, GetUnitX( st.attacked ) - 60.00, GetUnitY( st.attacked ) - 60.00, 585.00 )
        else
            call SetTextTagPos( st.tt, GetUnitX( st.attacked ) - 60.00, GetUnitY( st.attacked ) - 60.00, 80.00 + GetUnitFlyHeight( st.attacked ) )
        endif
        call UpdateAirportTrainingBar( st.tt, 100 - R2I( st.dmg / st.hp * 100.00 ), 100 )
        
    elseif id == EVENT_UNIT_DAMAGED and st.dmg < st.hp then
        set dd = DamageData.create( )
        set dd.trix = CreateTimer( )
        set dd.attacked = st.attacked
        set dd.dmg = GetEventDamage( )
        set dd.hp = GetUnitState( dd.attacked, UNIT_STATE_LIFE )
        
        call SetDataBX( dd.trix, dd )
        call UnitAddAbility( dd.attacked, 'AMhp' )
        call SetUnitState( dd.attacked, UNIT_STATE_LIFE, dd.hp + dd.dmg )
        
        call TimerStart( dd.trix, 0.00, false, function HealRunner )
        
        set st.dmg = st.dmg + dd.dmg
    else
        call UnitRemoveAbility( st.attacked, 'A08L' )
        call UnitMakeAbilityPermanent( st.attacked, false, 'A08L' )
        call DisableTrigger( st.trg )
        call SetTextTagVisibility( st.tt, false )
        
        if not IsUnitDead( st.attacked ) then
            call UnitRemoveAbility( st.attacked, 'B00A' )
        endif
        
        call RemoveSavedInteger( gg_htb_HashData, ExKeySoPRunner, GetHandleId( st.attacked ) )
        
        call st.RemoveTrigger( )
        call st.destroy( )
    endif
    
    set id = null
endfunction

function Trig_Staff_of_Purification_Actions takes nothing returns nothing
    local TriggerData dd
    local unit Runner = GetSpellAbilityUnit( )
    local integer RunnerId = GetHandleId( Runner )
    local item Staff = LoadItemHandle( gg_htb_HashData, RunnerId, ExKeySoP )
    local integer ChargesCount = 0
    local trigger trig = LoadTriggerHandle ( gg_htb_HashData, ExAtomShield, RunnerId )
    local integer pBuff
    
    if Staff == null then
        set Staff = Get_Staff_of_Purification( Runner )
         
        if Staff == null then
            //call DisplayTextToPlayer( Player( CrashPlayerNumber ), 0.00, 0.00, I2Sx( 'A01Q', CrashPlayerNumber ) )
            call BJDebugMsg( DEBUG + I2Sx( 'A02O', 0 ) + INFO )
            return
        endif
        
        call SaveBoolean( gg_htb_HashData, RunnerId, ExKeyHasStaff, true )
        call SaveItemHandle( gg_htb_HashData, RunnerId, ExKeySoP, Staff )
    endif
    
    set ChargesCount = GetItemCharges( Staff )
    
    if ChargesCount < 1 then
        set Runner = null
        set Staff = null
        set trig = null
        return
    endif
    
    call SetItemCharges( Staff, 0 )
    
    if trig != null then // блокирующие урон способности не складываются.
        call TriggerExecute( trig )
        set trig = null
    endif
    
    set dd = TriggerData.create( )
    set dd.attacked = Runner
    set dd.pl = GetOwningPlayer( Runner )
    set dd.trg = CreateTrigger( )
    set dd.trc = TriggerAddCondition( dd.trg, Condition( function Trig_RunnerDamageDetect_Conditions ) )
    set dd.tra = TriggerAddAction ( dd.trg, function Trig_RunnerDamageLock_Actions )
    set dd.tt = CreateTextTag( )
    set dd.hp = 1000.00 * ChargesCount
    set dd.dmg = 1.00
    set dd.id = 0
    set dd.time = 480
    set dd.c = 0.03125
    
    call UnitAddAbility( Runner, 'A07E' )
    call UnitRemoveAbility( Runner, 'A07E' )
    call UnitAddAbility( Runner, 'A08L' )
    call UnitMakeAbilityPermanent( Runner, true, 'A08L' )
    
    call SetDataBX( dd.trg, dd )
    call SaveInteger( gg_htb_HashData, ExKeySoPRunner, RunnerId, dd )
    
    call TriggerRegisterPlayerEvent( dd.trg, dd.pl, EVENT_PLAYER_LEAVE )
    call TriggerRegisterDeathEvent( dd.trg, Runner )
    call TriggerRegisterUnitEvent( dd.trg, Runner, EVENT_UNIT_DAMAGED )
    
    call TriggerRegisterTimerEvent( dd.trg, 0.03125, true )
    
    if GetLocalPlayer( ) == dd.pl or IsPlayerAlly( GetLocalPlayer( ), dd.pl ) then
        call SetTextTagVisibility( dd.tt, true )
    else
        call SetTextTagVisibility( dd.tt, false )
    endif
    
    set pBuff = GetUnitAbility( dd.attacked, 'B00A' ) + 0x90
    set dd.c = TimerGetElapsed( DispTimer )
    call WMem( RMem( pBuff ) + 0x4, mR2I( dd.c + 15.10 ) )
    call WMem( RMem( pBuff ) + 0x8, mR2I( dd.c + 10.408 ) )
    call SetBuffLevel( pBuff - 0x90, ChargesCount )
    call UpdateAirportTrainingBar( dd.tt, 100, 100 )
    
    set Runner = null
endfunction
    
//===========================================================================
function InitTrig_Staff_of_Purification takes nothing returns nothing
    set udg__TempBarStyle = 0
endfunction
Выше пример баффа для предмета, который образует щит блокирующий урон, кол-во заблокированного урона и сколько еще заблокирует щит отображается над головой героя, в виде полоски здоровья (только цвет сине-красный). Так же в статуе есть бафф, один в 1 как бафф дефектных способностей вара, не складывается - новый, перебивает старый. И так далее...
ответ
Data - Options: Visible, Targeting Image
Data - Target Type: Point Target
Stats - Area of Effect: 200.0
Прикрепляю пример. Могу сделать периодический урон тоже если нужно.